# _*_ coding: UTF-8 _*_
# @Time     : 2021/10/21 18:12
# @Author   : Zheng Luming
# @Site     : http://www.hzdledu.cn/
# @File     : practice.py
# @Software : PyCharm

# 1. 将4.3 逻辑运算符中的运算表，写成代码，并检查结果是否与表中一致
# | A     | B     | A and B | A or B | not A |
# | ----- | ----- | ------- | ------ | ----- |
# | true  | false | false   | true   | false |
# | false | true  | false   | true   | true  |
# | false | false | false   | false  | true  |
# | true  | true  | true    | true   | false |
print('------习题1-------')
print('a and b|a or b|not a')
a = True
b = False
print(a and b, end='\t')
print(a or b, end='\t')
print(not a)

a = False
b = True
print(a and b, end='\t')
print(a or b, end='\t')
print(not a)

a = True
b = True
print(a and b, end='\t')
print(a or b, end='\t')
print(not a)

a = False
b = False
print(a and b, end='\t')
print(a or b, end='\t')
print(not a)

print('------习题2-------')
# 2. 华氏温度转换为摄氏温度
# 英语国家大多采用华氏温度，华氏温度转设置温度转换公式为C=(F-32)*5/9，摄氏温度转华氏温度公式为：F=(C*9/5)+32
# 编写一个程序将用户输入的华氏温度抓换为摄氏温度，输入如下：
# 请输入华氏温度：68
# 摄氏温度为：20

tempf = int(input('请输入华氏温度：'))
tempc = (tempf - 32) * 5 / 9
print(f'摄氏温度为：{tempc}')

print('------习题3-------')
# 1、闰年问题（输入一个年份，判断是否为闰年）
# 能被4整除 不能被100整除
# 或者能被400整除
# 4年一闰，百年不闰，400年又闰

year = int(input('请输入一个年份：'))
if 0 == year % 4:
    if 0 == year % 400:
        print('是闰年')
    elif 0 == year % 100:
        print('不是闰年')
    else:
        print('是闰年')
else:
    print('不是闰年')

# 2、小明身高1.75，体重80kg。请根据BMI公式（体重除以身高的平方）帮小明计算他的BMI指数，并根据BMI指数：
# （1）低于18.5：过轻
# （2）18.5-25：正常
# （3）25-28：过重
# （4）28-32：肥胖
# （5）高于32：严重肥胖
print('------习题4-------')
height = float(input('请输入你的身高：'))
weight = float(input('请输入你的体重：'))
BMI = weight / (height ** 2)
if BMI < 18.5:
    print('过轻')
elif BMI <= 25:
    print('正常')
elif BMI <= 28:
    print('过重')
elif BMI <= 32:
    print('肥胖')
else:
    print('严重肥胖')

# 3.猜数字：系统给出一个1-10之间的整数，用户输入猜测的数字，系统给出相应的提示
print('------习题5-------')
import random

num = random.randint(1, 10)
print(num)
guess = int(input('请输入你猜的数字：'))
if 0 < guess < 10:
    if num == guess:
        print('恭喜您答对了！')
    else:
        print('你答错了')
else:
    print('请输入1-10之间的整数')

# 4.打印以下图形
# * * * * *
# * * * *
# * * *
# * *
# *

for i in range(5, 0, -1):
    for j in range(i):
        print('*', end=' ')
    print()

# 5.打印以下图形
# * * * * *
#   * * * *
#     * * *
#       * *
#         *

for i in range(5):
    for j in range(5):
        if j < i:
            print(' ', end=' ')
        else:
            print('*', end=' ')
    print()

# 6.打印以下图形
#         *
#       * *
#     * * *
#   * * * *
# * * * * *

for i in range(5, 0, -1):
    for j in range(6):
        if j < i:
            print(' ', end=' ')
        else:
            print('*', end=' ')
    print()

# 7.打印以下图形
#       *
#     * * *
#   * * * * *
# * * * * * * *
#   * * * * *
#     * * *
#       *

for i in range(7):
    for j in range(7):
        if abs(i - 3) + abs(j - 3) <= 3:
            print('*', end=' ')
        else:
            print(' ', end=' ')
    print()

# 8. 猜数字游戏，增加游戏次数限制，最多只能猜5次。如果5次都没猜正确，给出提示，游戏结束
import random
num = random.randint(1,100)
print(num)
for i in range(6):
    if i == 5:
        print('游戏结束')
    else:
        guess1 = int(input('请输入你猜的数:'))
        if guess1 == num:
            print('恭喜您猜对了')
        elif guess1 > num:
            print('你猜的数字大了')
        else:
            print('您猜的数字小了')


# 1. 解决千年虫问题，以前的电脑为了节省存储空间，通常年份都是用的两位数字，这样跨过2000年后，
# 2000年和1900都会被表示为00，造成计算机系统故障，编写程序将以下序列中1970后的年份转换为4位，并升序输出。
# 当前序列:[89,98,00,75,68,37,58,90]
# 输出序列:[1937,1958,1968,1975,1989,1990,1998,2000]
list1 = [89, 98, 00, 75, 68, 37, 58, 90]
for index in range(len(list1)):
    if list1[index] == 0:
        list1[index] += 2000
    else:
        list1[index] += 1900
for i in range(len(list1)):
    for j in range(len(list1)):
        if list1[i] < list1[j]:
            a = list1[j]
            list1[j] = list1[i]
            list1[i] = a
print(list1)

# 2. 练习：将列表[45,23,2,5,3,2,6,45,43,21,66,2,3,2]进行从小到大排序，不能用sort()函数，
# 1.冒泡排序：通过对相邻的两个数比较大小，较大(较小)数和后一个数交换位置，实现列表的整体有序
list1 = [45,23,2,5,3,2,6,45,43,21,66,2,3,2]
for i in range(len(list1)):            #外层循环决定比较次数
    for j in range(len(list1)-i-1):    #内层循环决定比较哪些数
        if list1[j] > list1[j+1]:      #比较相邻的两个数，若前一个数大于后一个数，则交换位置
            temp = list1[j]            # list1[j],list1[j+1] = list1[j+1],list1[j]
            list1[j] = list1[j+1]
            list1[j+1] = temp
print(list1)

# 3、求 100-200以内同时能被7、8整除的数
for i in range(100, 201):
    if i % 7 == 0 and i % 8 == 0:
        print(i)

# 4.找出一个列表中，只出现了一次的数字，并且保持原来的次序，例如[1,2,1,3,2,5]结果为[3,5]
list1 = [1,2,1,3,2,5]
list2 = []
for i in range(len(list1)):
    if list1.count(list1[i]) == 1:
        list2.append(list1[i])
print(list2)

list1 = [45,23,2,5,3,2,6,45,43,21,66,2,3,2]
list2 = []
for i in range(len(list1)):
    if list1.count(list1[i]) == 1:
        list2.append(list1[i])
print(list2)

# 提升
# 5、求 0 -1 + 2 - 3 + 4 - 5 + 6 -7.... + 100
sum1 = 0
for i in range(101):
    if i % 2 == 0:
        sum1 += i
    else:
        sum1 -= i
print(sum1)

# 6.求100以内的素数：>1整数，只能被1和自己整除
list2 = []
for i in range(2,101):
    for j in range(2,i+1):
        if i % j == 0 and i != j:
            break
        elif i % j == 0 and i == j:
            list2.append(i)
print(list2)

# 7. 水仙花数：水仙花数是指一个 n 位数 ( n 大于等于 3 )，它的每个位上的数字的 n 次幂之和等于它本身。
# # （例如：1的3次方 + 5的三次方 + 3三次方 = 153）。根据这个要求，打印所有三位数的水仙花数
list2 = []
for i in range(100,1000):
    list1 = str(i)
    a = list1[0]
    b = list1[1]
    c = list1[2]
    if int(a) ** 3 + int(b) ** 3 + int(c) ** 3 == i :
        list2.append(i)
print(list2)


# 8.一球从100米高度自由落下，每次落地后反跳回原高度的一半，再落下。
# 求它在 第10次落地时，共经过多少米？第10次反弹多高？
start = 100
sum1 = 100
i = int(input('请输入第几次落地:'))
for i in range(1, i + 1):
    if i > 1:
        sum1 = sum1 + start * 2
    start = start / 2.0
print(f'第{i}次反弹的高度为{start}米')
print(f'第{i}次落地时，共经过{sum1}米')

# 9. 随机产生20个100-200之间的正整数存放到列表中，
# 并求列表中的所有元素最大值、最小值、平均值，然后将各元素的与平均值的差组成一个列表
import random
num1 = 0
list1 = []
list2 = []
for i in range(20):
    num1 = random.randint(100, 200)
    list1.append(num1)
print(max(list1))
print(min(list1))
sum1 = sum(list1)
avgnum = sum1 // len(list1)
for i in range(len(list1)):
    list2.append(list1[i] - avgnum)
print(avgnum)
print(list2)
